package com.devops.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.devops.admin.model.DOSProjectVersion;
import com.devops.admin.po.DOSProjectVersionPhaseListPo;
import com.devops.admin.po.DOSProjectVersionPhasePo;
import com.devops.admin.model.TableResult;

import com.devops.admin.vo.DOSPageVo;
import com.devops.admin.vo.DOSVersionOperationVo;
import org.reactivestreams.Publisher;

/**
 * @ClassName DOSProjectVersionService
 * @Description TODO
 * @Author hepingguo
 * @Date 2022/6/17 09:39
 **/
public interface DOSProjectVersionService extends IService<DOSProjectVersion> {
    /**
     * 版本阶段状态流转的核心逻辑
     * @param vo
     * @param dosProjectVersion
     * @return
     */
    Integer switchProjectVersionStatus(DOSVersionOperationVo vo,DOSProjectVersion dosProjectVersion);

    /**
     * @Author heyabo
     * @Description 创建版本
     * @Date 08:51 2022/6/23
     * @Param [operation]
     * @return com.devops.admin.po.DOSProjectVersionPhaseListPo
     **/
    DOSProjectVersionPhaseListPo creatVersion(DOSVersionOperationVo operation);

    /**
     * 处理返回项目的某个版本的项目信息、版本信息、以及所有阶段状态信息
     * @param operation
     * @return
     */
    DOSProjectVersionPhaseListPo dealProjectVersionPhaseListPoInfo(DOSVersionOperationVo operation);

    /**
     * 处理返回项目的所有版本信息（含版本当前所处的流程状态） 分页
     * @param operation
     * @return
     */
    TableResult<DOSProjectVersionPhasePo> dealProjectVersionPhasePoInfo(DOSVersionOperationVo operation, DOSPageVo pageVo);



    /**
     * @Author heyabo
     * @Description 测试完成，审核通过，审核拒绝，用户确认，发布完成，webhook审核通过，webhook发布完成
     * @Date 08:53 2022/6/24
     * @Param [operation]
     * @return com.devops.admin.po.DOSProjectVersionPhaseListPo
     **/
    DOSProjectVersionPhaseListPo processOperation(DOSVersionOperationVo operation);


    /**
     * @Author heyabo
     * @Description 查询待审核的项目版本列表
     * @Date 15:51 2022/6/24
     * @Param [operation, pageVo]
     * @return com.devops.admin.model.TableResult<com.devops.admin.po.DOSProjectVersionPo>
     **/
    TableResult<DOSProjectVersionPhasePo> getToBeReviewed(DOSVersionOperationVo operation, DOSPageVo pageVo);

    /**
     * 监听版本状态
     * @param versionId
     * @return
     */
    Publisher<Integer> monitorVersionStatus(Integer versionId,String type);
    /**
     * 查询发版是否超时
     * @param versionId
     * @return
     */
    void checkTimeOutProjectVersion(Integer versionId);
}
